#include <cstdio>

/*
    1 --> 不能放黑皇后
    2 --> 不能放白皇后
    3 --> 都不能放
    0 --> 都可以放
*/

int n, ans;
int vy[10], vd1[10], vd2[10];   // 表示 y 轴以及两条对角线
int mp[10][10];

void dfs(int x, int p) {
    if(x == n && 2 == p) {
        ans++;
        return ;
    }
    if(x == n) {
        dfs(0, p + 1);
        return ;
    }
    
    // 开始搜索
    for(int i = 0; i < n; i++) {
        if(mp[x][i] && vy[i] != 3 && vy[i] != p && vd1[x+i] != 3 && vd1[x+i] != p && vd2[x-i+n] != 3 && vd2[x-i+n] != p) {
           mp[x][i] = 0;
           vy[i] += p;
           vd1[x + i] += p;
           vd2[x - i + n] += p;

           dfs(x+1, p);

           vy[i] -= p;
           vd1[x + i] -= p;
           vd2[x - i + n] -= p;
           mp[x][i] = 1;    // 标记回可用状态
        }     
    }
}

int main()
{
    scanf("%d", &n);
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            scanf("%d", &mp[i][j]);
        }
    }

    dfs(0, 1);   // 放黑皇后开始，按照行搜索
    printf("%d\n", ans);

    return 0;
}

